﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
//using System.Web.UI.WebControls;
using Entities;
using System.Windows.Forms;
using DevExpress.Web.ASPxEditors;
using DevExpress.Web.ASPxClasses.Internal;
using DevExpress.Web.ASPxUploadControl;
using Helpers;
using System.Drawing;
using System.IO;

public partial class pProductoModificarDatos : System.Web.UI.Page
{

    const string UploadDirectory = "~/ImagenesSubidas/";
    const string ThumbnailFileName = "ImagenProducto.jpg";

    protected void Page_Load(object sender, EventArgs e)
    {


        if (cmbCategoria.IsCallback)
                CargarComboSubCategoria();

        if (!Page.IsPostBack)
        {
            if (Session["Email"] != null)
                Master.UsuarioRegistrado(Session["Email"].ToString());
            Session["Imagen"] = null;
            lblError.Visible = false;
            lblActualizacionOK.Visible = false;
            lblIDNegocio.Text = Request["IDNegocio"];
            CargarCombosPrimeraVez();
            if (Request["IDProducto"] != null)
            {
                lblIDProducto.Text = Request["IDProducto"];
                CargarDatos();
                CargarComboSubCategoria();
            }
            else
            {
                binaryImage.Visible = false;
            }
            
        }

        //if (uplImage.ImageFolder.ToString() != string.Empty)
        //{
        //    previewImage.Src = uplImage.ImageFolder;
        //}
    }

    protected void uplImage_FileUploadComplete(object sender, DevExpress.Web.ASPxUploadControl.FileUploadCompleteEventArgs e)
    {
        e.CallbackData = SavePostedFile(e.UploadedFile);
    }

    string SavePostedFile(UploadedFile uploadedFile)
    {
        if (!uploadedFile.IsValid)
            return string.Empty;
        string fileName = Path.Combine(MapPath(UploadDirectory), ThumbnailFileName);
        Image original = Image.FromStream(uploadedFile.FileContent);
        Image thumbnail = PhotoUtils.Inscribe(original, 160);
        PhotoUtils.SaveToJpeg(thumbnail, fileName);
        byte[] bytesLogo = PhotoUtils.Image2Bytes(thumbnail);
        Session["Imagen"] = bytesLogo;
        return ThumbnailFileName;
    }

    private void CargarDatos()
    {
        try
        {
            var oProducto = Producto.BuscarUno(long.Parse(lblIDProducto.Text));
            txtProductoNombre.Text = oProducto.NombreProducto;
            txtProductoMarca.Text = oProducto.Marca;
            txtProductoPrecio.Text = oProducto.Precio.ToString();
            txtProductoDescripcion.Text = oProducto.Descripcion;
            cmbCategoria.Text = oProducto.SubCategoria.Categoria.Nombre;
            cmbSubCategoria.Text = oProducto.SubCategoria.Nombre;
            if (oProducto.Imagen != null)
            {
                binaryImage.Visible = true;
                binaryImage.Value = oProducto.Imagen;
            }
            
        }
        catch (Exception ex)
        {
            lblError.Text = "Error en método cargar producto, Descripción de error: " + ex.Message;
        }
    }

    private void CargarComboSubCategoria()
    {
        cmbSubCategoria.DataSource = SubCategoria.ObtenerVariosPorCategotia(long.Parse(cmbCategoria.SelectedItem.Value.ToString()));
        cmbSubCategoria.DataBind();
        //cmbSubCategoria.Items[0].Selected = true;
    }

    private void CargarCombosPrimeraVez()
    {

        cmbCategoria.DataSource = Categoria.ObtenerTodos();
        cmbCategoria.DataBind();
        cmbCategoria.Items[0].Selected = true;

        cmbSubCategoria.DataSource = SubCategoria.ObtenerVariosPorCategotia(long.Parse(cmbCategoria.SelectedItem.Value.ToString()));
        cmbSubCategoria.DataBind();
        cmbSubCategoria.Items[0].Selected = true;
    }

    private long GuardarNuevo()
    {
        long longIDUsuario = 0;
        try
        {
            Producto oProducto = new Producto(true);
            oProducto.NombreProducto = txtProductoNombre.Text ;
            oProducto.Marca = txtProductoMarca.Text ;
            oProducto.Negocio = new Negocio();
            oProducto.Negocio.IDNegocio = long.Parse(lblIDNegocio.Text);
            oProducto.Precio = decimal.Parse(txtProductoPrecio.Text);
            oProducto.FechaCarga = System.DateTime.Now;
            oProducto.Descripcion = txtProductoDescripcion.Text;
            oProducto.SubCategoria.IDSubCategoria =long.Parse(cmbSubCategoria.Value.ToString());
            oProducto.SubCategoria.Categoria = new Categoria();
            oProducto.SubCategoria.Categoria.IDCategoria =long.Parse(cmbCategoria.Value.ToString());
            if (Session["Imagen"] != null)
                oProducto.Imagen = (byte[])Session["Imagen"];
            //Guarda el prodcuto
            longIDUsuario = Producto.Nuevo(oProducto);
            return longIDUsuario;
        }
        catch (Exception ex)
        {
            lblError.Text = "Error en método guardar producto nuevo, Descripción de error: " + ex.Message;
            return longIDUsuario;
        }
    }

    private void ModificarDatosUsuario()
    {
        try
        {
            Producto oProducto = Producto.BuscarUno(long.Parse(lblIDProducto.Text));
            oProducto.NombreProducto = txtProductoNombre.Text;
            oProducto.Marca = txtProductoMarca.Text;
            oProducto.Precio = decimal.Parse(txtProductoPrecio.Text);
            oProducto.Descripcion = txtProductoDescripcion.Text;
            oProducto.SubCategoria.IDSubCategoria = long.Parse(cmbSubCategoria.Value.ToString());
            oProducto.SubCategoria.Categoria.IDCategoria = long.Parse(cmbCategoria.Value.ToString());
            if (Session["Imagen"] != null)
                oProducto.Imagen = (byte[])Session["Imagen"];
            Producto.Modificar(oProducto);

        }
        catch (Exception ex)
        {
            lblError.Text = "Error en método modificar datos producto, Descripción de error: " + ex.Message;
        }
    }

    #region eventos

    protected void cmbUsuarioCalle_Callback1(object sender, DevExpress.Web.ASPxClasses.CallbackEventArgsBase e)
    {
        CargarComboSubCategoria();
    }

    protected void btnPopConfirmar_Click(object sender, EventArgs e)
    {
        Decimal dOut;
        if (!Decimal.TryParse(txtProductoPrecio.Text,out dOut))
        {
            lblError.Visible = true;
            lblError.Text = "El precio no tiene el formato correcto. Deben ser solo números ylos decimales deben estár separados por coma";
            return;
        }


        if (lblIDProducto.Text == "0")
        {
            if (GuardarNuevo() > 0)
            {
                lblError.Visible = false;
                lblActualizacionOK.Visible = true;
                Session["Imagen"] = null;
            }
        }
        else
        {
            lblError.Visible = false;
            ModificarDatosUsuario();
            lblActualizacionOK.Visible = true;
            Session["Imagen"] = null;
        }
        Response.Redirect("pProductos.aspx?IDNegocio=" + lblIDNegocio.Text);
        
    }


    protected void btnSiguiente_Click(object sender, EventArgs e)
    {
        Response.Redirect("pProductos.aspx?IDNegocio=" + lblIDNegocio.Text);
    }
    #endregion

    protected void cpImagen_Callback(object sender, DevExpress.Web.ASPxClasses.CallbackEventArgsBase e)
    {
        if (Session["Imagen"] != null)
        {
            binaryImage.Value = (byte[])Session["Imagen"];
            binaryImage.Visible = true;
        }
    }
    protected void cmbCategoria_SelectedIndexChanged1(object sender, EventArgs e)
    {
        string strCategoria = cmbCategoria.Text.ToString();
        long idCategoria = long.Parse(cmbCategoria.Value.ToString());
        cmbSubCategoria.DataSource = SubCategoria.ObtenerVariosPorCategotia(idCategoria);
        cmbSubCategoria.DataBind();
        cmbSubCategoria.Items[0].Selected = true;

        cmbCategoria.DataSource = Categoria.ObtenerTodos();
        cmbCategoria.DataBind();
        cmbCategoria.Text = strCategoria;

    }
    protected void pDatos_Callback(object sender, DevExpress.Web.ASPxClasses.CallbackEventArgsBase e)
    {
        string strCategoria = cmbCategoria.Text;
        long idCategoria = long.Parse(cmbCategoria.Value.ToString());
        cmbSubCategoria.DataSource = SubCategoria.ObtenerVariosPorCategotia(idCategoria);
        cmbSubCategoria.DataBind();
        cmbSubCategoria.Items[0].Selected = true;

        cmbCategoria.DataSource = Categoria.ObtenerTodos();
        cmbCategoria.DataBind();
        cmbCategoria.Text = strCategoria;
    }
}